/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.colegiatura.beans;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.myfaces.custom.fileupload.UploadedFile;
import org.cip.esymons.colegiatura.bc.ColegiadoDelegate;
import org.cip.esymons.colegiatura.bc.DirectivosDelegate;
import org.cip.esymons.colegiatura.bc.PersonaNaturalDelegate;
import org.cip.esymons.colegiatura.bc.solicitanteDelegate;
import org.cip.esymons.colegiatura.be.Colegiado;
import org.cip.esymons.general.be.Directivos;
import org.cip.esymons.general.be.PersonaNatural;
import org.cip.esymons.general.util.ControladorAbstracto;
import org.cip.esymons.general.util.EnviaEmail;

/**
 *
 * @author ADMINISTRADOR
 */
public class emailController {

    private DirectivosDelegate delegadoDirectivos;
    private solicitanteDelegate delegadoSolicitante;
    private ColegiadoDelegate delegadoColegiado;
    private PersonaNaturalDelegate delegadoPersona;

    private Directivos directivo;
    private Colegiado colegiado;
    private PersonaNatural personaNatural,persona;
    private String from;  //origen
    private String to;   //destino
    private String title;  //asunto
    private String text;    //mensaje
    private String destino = "";    //destino
    private String adjunto; //archivo adjunto
    private List<Directivos> listaDirectivosPeriodoActivo;
    private List<PersonaNatural> listaPersonas;
    private List<Colegiado> listaColegiadoPorFecha;
    private List<PersonaNatural> listaPersonasCorreoFechaIncorp;
    private List<PersonaNatural> listaPersonaCorreo;
    private List<PersonaNatural> listaPersonaCorreoCip;
    private String mensaje;
    private String dni,apePat,apeMat,nombre,codigoCIP;
    private Boolean exito;
    private Integer seleccFecha,busca,opcion;
    private Date fecha1, fecha2;


    public emailController() {

        delegadoDirectivos = new DirectivosDelegate();
        delegadoSolicitante = new solicitanteDelegate();
        delegadoColegiado = new ColegiadoDelegate();
        delegadoPersona = new PersonaNaturalDelegate();

        directivo = new Directivos();
        colegiado = new Colegiado();
        personaNatural = new PersonaNatural();
        persona = new PersonaNatural();

        listaDirectivosPeriodoActivo = new ArrayList<Directivos>();
        listaDirectivosPeriodoActivo = null;
        listaPersonas = new ArrayList<PersonaNatural>();
        listaPersonas = null;
        listaColegiadoPorFecha = new ArrayList<Colegiado>();
        listaPersonaCorreo = new ArrayList<PersonaNatural>();
        listaPersonaCorreoCip = new ArrayList<PersonaNatural>();
        listaPersonasCorreoFechaIncorp = new ArrayList<PersonaNatural>();
        listaColegiadoPorFecha = null;
        listaPersonaCorreoCip = null;
        exito = false;       

    }

    public List<PersonaNatural> getListaPersonasCorreoFechaIncorp() {
        return listaPersonasCorreoFechaIncorp;
    }

    public void setListaPersonasCorreoFechaIncorp(List<PersonaNatural> listaPersonasCorreoFechaIncorp) {
        this.listaPersonasCorreoFechaIncorp = listaPersonasCorreoFechaIncorp;
    }

    public PersonaNatural getPersona() {
        return persona;
    }

    public void setPersona(PersonaNatural persona) {
        this.persona = persona;
    }

    public String getDestino() {
        return destino;
    }

    public void setDestino(String destino) {
        this.destino = destino;
    }

    public Integer getOpcion() {
        return opcion;
    }

    public void setOpcion(Integer opcion) {
        this.opcion = opcion;
    }

    public List<PersonaNatural> getListaPersonaCorreoCip() {
        return listaPersonaCorreoCip;
    }

    public void setListaPersonaCorreoCip(List<PersonaNatural> listaPersonaCorreoCip) {
        this.listaPersonaCorreoCip = listaPersonaCorreoCip;
    }

    public Boolean getExito() {
        return exito;
    }

    public void setExito(Boolean exito) {
        this.exito = exito;
    }

    public List<PersonaNatural> getListaPersonaCorreo() {
        return listaPersonaCorreo;
    }

    public void setListaPersonaCorreo(List<PersonaNatural> listaPersonaCorreo) {
        this.listaPersonaCorreo = listaPersonaCorreo;
    }

    
    public PersonaNatural getPersonaNatural() {
        return personaNatural;
    }

    public void setPersonaNatural(PersonaNatural personaNatural) {
        this.personaNatural = personaNatural;
    }

    public PersonaNaturalDelegate getDelegadoPersona() {
        return delegadoPersona;
    }

    public void setDelegadoPersona(PersonaNaturalDelegate delegadoPersona) {
        this.delegadoPersona = delegadoPersona;
    }

    public List<Colegiado> getListaColegiadoPorFecha() {
        return listaColegiadoPorFecha;
    }

    public void setListaColegiadoPorFecha(List<Colegiado> listaColegiadoPorFecha) {
        this.listaColegiadoPorFecha = listaColegiadoPorFecha;
    }

    public Colegiado getColegiado() {
        return colegiado;
    }

    public void setColegiado(Colegiado colegiado) {
        this.colegiado = colegiado;
    }

    public ColegiadoDelegate getDelegadoColegiado() {
        return delegadoColegiado;
    }

    public void setDelegadoColegiado(ColegiadoDelegate delegadoColegiado) {
        this.delegadoColegiado = delegadoColegiado;
    }

    public Date getFecha1() {
        return fecha1;
    }

    public void setFecha1(Date fecha1) {
        this.fecha1 = fecha1;
    }

    public Date getFecha2() {
        return fecha2;
    }

    public void setFecha2(Date fecha2) {
        this.fecha2 = fecha2;
    }

    public Integer getSeleccFecha() {
        return seleccFecha;
    }

    public void setSeleccFecha(Integer seleccFecha) {
        this.seleccFecha = seleccFecha;
    }

    public Integer getBusca() {
        return busca;
    }

    public void setBusca(Integer busca) {
        this.busca = busca;
    }
    
    public String getCodigoCIP() {
        return codigoCIP;
    }

    public void setCodigoCIP(String codigoCIP) {
        this.codigoCIP = codigoCIP;
    }

    public String getApeMat() {
        return apeMat;
    }

    public void setApeMat(String apeMat) {
        this.apeMat = apeMat;
    }

    public String getApePat() {
        return apePat;
    }

    public void setApePat(String apePat) {
        this.apePat = apePat;
    }

    public solicitanteDelegate getDelegadoSolicitante() {
        return delegadoSolicitante;
    }

    public void setDelegadoSolicitante(solicitanteDelegate delegadoSolicitante) {
        this.delegadoSolicitante = delegadoSolicitante;
    }

    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public List<PersonaNatural> getListaPersonas() {
        return listaPersonas;
    }

    public void setListaPersonas(List<PersonaNatural> listaPersonas) {
        this.listaPersonas = listaPersonas;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public Directivos getDirectivo() {
        return directivo;
    }

    public void setDirectivo(Directivos directivo) {
        this.directivo = directivo;
    }

    public String getMensaje() {
        return mensaje;
    }

    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }

    public List<Directivos> getListaDirectivosPeriodoActivo() {
        return listaDirectivosPeriodoActivo;
    }

    public void setListaDirectivosPeriodoActivo(List<Directivos> listaDirectivosPeriodoActivo) {
        this.listaDirectivosPeriodoActivo = listaDirectivosPeriodoActivo;
    }

    public DirectivosDelegate getDelegadoDirectivos() {
        return delegadoDirectivos;
    }

    public void setDelegadoDirectivos(DirectivosDelegate delegadoDirectivos) {
        this.delegadoDirectivos = delegadoDirectivos;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public String getAdjunto() {
        return adjunto;
    }

    public void setAdjunto(String adjunto) {
        this.adjunto = adjunto;
    }

    //RELACION DE DIRECTIVOS DEL PERIODO EN VIGENCIA
    public List<Directivos> listarDirectivosPeridoActivo(){

       listaDirectivosPeriodoActivo = null;
       listaDirectivosPeriodoActivo = delegadoDirectivos.listaDirectivosPeriodoActivo();

       for(Directivos dir : listaDirectivosPeriodoActivo){
               dir.setEmail(true);
               dir.setSeleccion(true);
       }
       return listaDirectivosPeriodoActivo;

    }

    public String listarDirectivos(){

        listarDirectivosPeridoActivo();
        return null;
    }


    public String limpiar(){

        from = "";
        title = "";
        text = "";
        destino = "";
        listaPersonaCorreo = new ArrayList<PersonaNatural>();
        listaColegiadoPorFecha = new ArrayList<Colegiado>();
        listaPersonas = new ArrayList<PersonaNatural>();
        fecha1 = null;
        fecha2 = null;
        busca = null;
        upFile = null;
        exito = false;

        return "agregaOtro";
    }

    private File file;

    public File getFile() {
        return file;
    }

    public void setFile(File file) {
        this.file = file;
    }

    //METODO PARA ENVIAR MAIL A LOS DIRECTIVOS
    public String enviarEmail(){
        
        String ruta = "D:\\esymons\\Codigo\\org.cip.esymons\\org.cip.esymons.colegiatura\\web\\Archivos\\";
//           String ruta = "/modulos/colegiatura/adjuntos/";  // ruta linux
        HttpServletRequest request = ControladorAbstracto.getRequest();
        String Imagen = "/imagenColegiatura/LogoCorreo.gif";
        String rutaImagen = request.getRealPath(Imagen);

        try{

            if(upFile != null){
                InputStream stream = upFile.getInputStream();
                OutputStream out=new FileOutputStream(ruta+upFile.getName());
                long size = upFile.getSize();
                byte[] buffer = new byte[(int) size];
                stream.read(buffer, 0, (int) size);
                out.write(buffer, 0, (int) size);
                stream.close();
                adjunto = ruta+upFile.getName().toString();
                out.close();
                rendSuccess = true;
                rendFailure = false;
                System.out.println("File Upload Successful.");
            }

            file = new File(upFile.getName());
        for(Directivos dir: listaDirectivosPeriodoActivo){
         //verificar si fue seleccionado para enviarle el mail
         if(dir.getSeleccion()==true){
           //verificar a que correo se le envia el mail             
               if(dir.getEmail() == true){
                   to = dir.getColCodigo().getPersonaNatural().getSolcorreopersonal1();

                   if(adjunto == null){
                      System.out.println("ENTRO NORMAL");
                      mensaje = EnviaEmail.envia(from, to, title, text, rutaImagen);
                      System.out.println("mensaje : se envio correctamente");
                   }else{
                       System.out.println("entro adjunto");
                       System.out.println("adjunto : "+adjunto);
                       mensaje = EnviaEmail.enviaFile(from, to, title, text, file, rutaImagen);
//                       mensaje = EnviaEmail.enviaAdjunto(from, to, title, text, adjunto, rutaImagen);
                       System.out.println("mensaje : se envio correctamente "+mensaje);
                   }
               }
               if(dir.getEmailCIP() == true){
                   to = dir.getColCodigo().getPersonaNatural().getSolcorreocip();

                   if(adjunto == null){
                      System.out.println("entro normal en cip");
                      mensaje = EnviaEmail.envia(from, to, title, text, rutaImagen);
                      System.out.println("mensaje : se envio correctamente");
                   }else{
                     System.out.println("entro adjunto en cip");
                     System.out.println("adjunto : "+adjunto);
                     mensaje = EnviaEmail.enviaAdjunto(from, to, title, text, adjunto, rutaImagen);
                   }
               }
           }       
          System.out.println("mensaje : "+mensaje);
         }       
            from = "";
            title = "";
            text = "";
            exito = true;
        return null;
       
       }catch(Exception ex){
            System.out.println("errorrrr" + ex.toString());
            return null;
       }
    }

    public String buscarColegiado(){

        try{
            String ruc = "";
            boolean soloColegiados = true;
            listaColegiadoPorFecha = null;
            listaPersonas = null;
            listaPersonas = delegadoSolicitante.buscarPerNatural(dni, apePat, apeMat, nombre, ruc, soloColegiados);
            return null;
        }catch(Exception ex){
            return null;
        }
      
    }

    public List<PersonaNatural> listaPersonaPorFechaIncorp(){

        try{            
//            listaColegiadoPorFecha = null;
//            listaColegiadoPorFecha = delegadoColegiado.listaColegiadosFechaIncorpConCorreo(fecha1, fecha2);
//            System.out.println("lista Colegiados: "+listaColegiadoPorFecha);
//            return listaColegiadoPorFecha;
            listaPersonas = null;
            listaPersonasCorreoFechaIncorp = null;
            listaPersonasCorreoFechaIncorp = delegadoPersona.listaPersonasConCorreoFechaIncorp(fecha1, fecha2);

            return listaPersonasCorreoFechaIncorp;


        }catch(Exception ex){
            return null;
        }
    }

    public String listarPersonasCorreoPorFecha(){

        try {
            listaPersonaPorFechaIncorp();
            return null;
        } catch (Exception e) {
            return null;
        }
    }

    public String seleccionar(){

        try{
            System.out.println("persona : "+personaNatural.getPerapellidoPaterno());

            persona = new PersonaNatural();
            persona = delegadoPersona.buscaXCodigo(personaNatural.getSolCodigo());

            persona.setSeleccionado(true);
            persona.setEmail(true);
            System.out.println("persona : "+persona.getSeleccionado());
            listaPersonaCorreo.add(persona);
            System.out.println("persona en lista : "+listaPersonaCorreo.get(0).getPerapellidoPaterno());
            System.out.println("destino : "+destino);

            if(destino == null){
                destino = persona.getSolcorreopersonal1()+"; ";
            }else{
               destino = destino + persona.getSolcorreopersonal1()+"; ";
            }
            System.out.println("destino : "+destino);
            System.out.println("listaCorreo : "+listaPersonaCorreo.size());
            listaPersonas.remove(personaNatural);

            return null;
        }catch(Exception ex){
            System.out.println("mensaje : "+ex);
            return null;
        }
    }

    public String seleccionarColegiado(){

        try{
            personaNatural = new PersonaNatural();
            personaNatural = delegadoPersona.buscaXCodigo(persona.getSolCodigo());
            personaNatural.setSeleccionado(true);
            personaNatural.setEmail(true);
            personaNatural.setEmailCIP(false);
            listaPersonaCorreo.add(personaNatural);            
            
            if(destino == null){
                destino = persona.getSolcorreopersonal1()+"; ";
            }else{
               destino = destino + persona.getSolcorreopersonal1()+"; ";
            }
            listaPersonasCorreoFechaIncorp.remove(persona);
            return null;
        }catch(Exception ex){
            return null;
        }
    }


    public String seleccionarTodos(){

        try{
            for(PersonaNatural per: listaPersonasCorreoFechaIncorp){

                personaNatural = new PersonaNatural();
                personaNatural = delegadoPersona.buscaXCodigo(per.getSolCodigo());
                personaNatural.setSeleccionado(true);
                personaNatural.setEmail(true);
                personaNatural.setEmailCIP(false);

                listaPersonaCorreo.add(personaNatural);
                if(destino == null){
                destino = per.getSolcorreopersonal1()+"; ";
                }else{
                   destino = destino + per.getSolcorreopersonal1()+";";
                }
                
            }
            listaPersonasCorreoFechaIncorp = null;

        return "creaCorreo";
        }catch(Exception ex){
            return null;
        }
    }

    public String quitarDeLaLista(){

        listaPersonaCorreo.remove(personaNatural);
        return null;
    }

    public String creaCorreo(){

        try {
            System.out.println("busca  : "+busca);
            if(busca ==3){
                listaPersonaCorreo = delegadoPersona.listaPersonasConCorreo();
                System.out.println("tamaño lista : "+listaPersonaCorreo.size());
                for(PersonaNatural persona1 : listaPersonaCorreo){

                        persona1.setEmail(true);
                        persona1.setEmailCIP(false);
                        persona1.setSeleccionado(true);

                }
            }
        return "creaCorreo";
        }catch (Exception e) {
            return null;
        }
        
    }

    public String agregaOtro(){

        return "agregaOtro";
    }

    //METODO PARA ENVIAR MAIL A LOS COLEGIADOS
    public String enviarEmailColegiados(){

        try{
           String ruta = "D:\\esymons\\Codigo\\org.cip.esymons\\org.cip.esymons.colegiatura\\web\\Archivos\\";
//           String ruta = "/modulos/colegiatura/adjuntos/";  // ruta linux
           HttpServletRequest request = ControladorAbstracto.getRequest();
           String Imagen = "/imagenColegiatura/LogoCorreo.gif";
           String rutaImagen = request.getRealPath(Imagen);
            
           exito = false;
           int i=0;

           if(upFile != null){
                InputStream stream = upFile.getInputStream();
                OutputStream out = new FileOutputStream(ruta+upFile.getName());
                long size = upFile.getSize();
                byte[] buffer = new byte[(int) size];
                stream.read(buffer, 0, (int) size);
                out.write(buffer, 0, (int) size);
                stream.close();
                adjunto = ruta+upFile.getName().toString();
                out.close();
                rendSuccess = true;
                rendFailure = false;
                System.out.println("File Upload Successful.");                
            }
          
           for(PersonaNatural person: listaPersonaCorreo){
             //verificar si fue seleccionado para enviarle el mail
             if(person.getSeleccionado()==true){
               //verificar a que correo se le envia el mail
                 System.out.println("entro seleccionado");
               if(person.getEmail() == true ){
                   System.out.println("entro email....");
                   
                   to = person.getSolcorreopersonal1();
                   if(adjunto == null){
                       System.out.println("ENTRO NORMAL");
                       mensaje = EnviaEmail.envia(from, to, title, text, rutaImagen);
                       System.out.println("mensaje enviado : "+i+" "+mensaje);
                       
                   }else{
                       System.out.println("ENTRO ADJUNTO");
                       System.out.println("adjunto : "+adjunto);
                       mensaje = EnviaEmail.enviaAdjunto(from, to, title, text, adjunto, rutaImagen);
                       System.out.println("mensaje enviado : "+i+" "+mensaje);                       
                   }
               }
//               if(person.getEmailCIP() == true){
//                   to = person.getSolcorreocip();
//
//                   if(adjunto == null){
//                      System.out.println("entro normal en cip");
//                      mensaje = EnviaEmail.envia(from, to, title, text, rutaImagen);
//                      System.out.println("mensaje : se envio correctamente");
//                   }else{
//                     System.out.println("entro adjunto en cip");
//                     System.out.println("adjunto : "+adjunto);
//                     mensaje = EnviaEmail.enviaAdjunto(from, to, title, text, adjunto, rutaImagen);
//                   }
//               }
             }i=i+1;
//             System.out.println("mensaje : "+mensaje);
           }
           exito = true;
           from = "";
           title = "";
           text = "";
           destino = "";
           to = "";
           listaPersonas = null;
           listaColegiadoPorFecha = null;
           listaPersonaCorreo = null;

           return null;
        }catch(Exception ex){
            System.out.println("mensaje error : "+ex);
            return null;
        }
    }

    public String limpiaListas(){

       listaPersonas = null;        
       listaColegiadoPorFecha = null;
       listaPersonaCorreo = null;
       
        return null;
    }
       
    // subir archivo

    private UploadedFile upFile;
    boolean rendSuccess = false;
    boolean rendFailure = false;

    public boolean isRendFailure() {
        return rendFailure;
    }

    public void setRendFailure(boolean rendFailure) {
        this.rendFailure = rendFailure;
    }

    public boolean isRendSuccess() {
        return rendSuccess;
    }

    public void setRendSuccess(boolean rendSuccess) {
        this.rendSuccess = rendSuccess;
    }

    public UploadedFile getUpFile() {
        return upFile;
    }

    public void setUpFile(UploadedFile upFile) {
        this.upFile = upFile;
    }


    
    
}
